/**
 * DICOM服务器配置
 * 用于配置内网文件服务器地址和代理设置
 */

// 从环境变量获取服务器配置
const getServerConfig = () => {
	// 开发环境使用代理，生产环境使用环境变量配置的服务器地址
	const isDevelopment = import.meta.env.VITE_APP_ENV === "development";

	if (isDevelopment) {
		// 开发环境：使用代理路径，由Vite代理转发
		return {
			baseUrl: "/files", // 开发环境使用代理路径
			proxyPrefix: "/files",
			dicomWebPrefix: "dicomweb:",
			corsHeaders: {
				"Access-Control-Allow-Origin": "*",
				"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
				"Access-Control-Allow-Headers": "Content-Type, Authorization"
			}
		};
	} else {
		// 生产环境：使用环境变量配置的服务器地址
		const dicomServerUrl =
			import.meta.env.VITE_DICOM_SERVER_URL || "http://192.168.16.250:7002";
		return {
			baseUrl: dicomServerUrl, // 生产环境使用实际服务器地址
			proxyPrefix: "/files",
			dicomWebPrefix: "dicomweb:",
			corsHeaders: {
				"Access-Control-Allow-Origin": "*",
				"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
				"Access-Control-Allow-Headers": "Content-Type, Authorization"
			}
		};
	}
};

// 内网文件服务器配置
export const DICOM_SERVER_CONFIG = getServerConfig();

/**
 * 获取完整的服务器URL
 * @param {string} path - 相对路径
 * @returns {string} 完整URL
 */
export function getServerUrl(path = "") {
	const { baseUrl } = DICOM_SERVER_CONFIG;
	return `${baseUrl}/${path.replace(/^\//, "")}`;
}

/**
 * 获取代理URL
 * @param {string} path - 相对路径
 * @returns {string} 代理URL
 */
export function getProxyUrl(path = "") {
	const { proxyPrefix } = DICOM_SERVER_CONFIG;
	return `${proxyPrefix}/${path.replace(/^\//, "")}`;
}

/**
 * 检查URL是否来自内网服务器
 * @param {string} url - 要检查的URL
 * @returns {boolean} 是否来自内网服务器
 */
export function isInternalServerUrl(url) {
	const { baseUrl } = DICOM_SERVER_CONFIG;

	// 检查是否以配置的baseUrl开头
	if (url && url.startsWith(baseUrl)) {
		return true;
	}

	// 检查是否是前置机返回的内网IP地址，需要替换为网闸IP
	const internalServerPatterns = [
		"http://192.168.16.250:7002",
		"http://192.168.16.250",
		"http://192.168.0.8:7002",
		"http://192.168.0.8",
		"http://10.168.128.101:7001",
		"http://10.168.128.101"
		// 可以添加其他可能的内网IP模式
	];

	return internalServerPatterns.some(pattern => url && url.startsWith(pattern));
}

/**
 * 将前置机返回的内网URL转换为网闸URL
 * @param {string} url - 原始URL
 * @returns {string} 转换后的URL
 */
export function convertInternalUrlToGateway(url) {
	if (!url) return url;

	const { baseUrl } = DICOM_SERVER_CONFIG;

	// 前置机内网IP模式 - 匹配任何内网IP，只替换IP部分，保留端口
	const internalServerPatterns = [
		"http://192.168.0.8:7002",
		"http://192.168.0.8",
		"http://192.168.16.250:7002",
		"http://192.168.16.250",
		"http://10.168.128.101:7001",
		"http://10.168.128.101"
	];

	// 查找匹配的内网模式并替换为网闸地址
	for (const pattern of internalServerPatterns) {
		if (url.startsWith(pattern)) {
			return url.replace(pattern, baseUrl);
		}
	}

	// 如果没有匹配的模式，返回原URL
	return url;
}

export default DICOM_SERVER_CONFIG;
